package com.globalwave.common;

import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;

public class ImageUtil {
    
    public static void main(String arg[]) {

        String filePath = "s:/DSC_0001.JPG"; // 图片的位置

        int height = 500;
        int width = 1500;
        Icon icon = null;
        try {
            //icon = getFixedBoundIcon(filePath, height, width);
        } catch (Exception e) {
            System.out.println("exception : " + e);
        }
        System.out.println(" ### " + icon); // 生成新图片的位置；
    }

    public static Icon getFixedBoundIcon(File F, int height, int width) throws Exception {
        double Ratio = 0.0;
        // 缩放比例
        //File F = new File(filePath);
        String filePath = F.getAbsolutePath() ;
        if (!F.isFile())
            throw new Exception(F + " is not image file error in getFixedBoundIcon!");
        Icon ret = new ImageIcon(filePath);
        BufferedImage Bi = ImageIO.read(F);
        if ((Bi.getHeight() > height) || (Bi.getWidth() > width)) {
            if (Bi.getHeight() > Bi.getWidth()) {
                Ratio = (new Integer(height)).doubleValue() / Bi.getHeight();
            } else {
                Ratio = (new Integer(width)).doubleValue() / Bi.getWidth();
            }
            //int lastLength = filePath.lastIndexOf(".");
            //String subFilePath = filePath.substring(0, lastLength);
            //String fileType = filePath.substring(lastLength);
            File zoomFile = new File(filePath + ".mjpg");
            Image Itemp = Bi.getScaledInstance(width, height, Bi.SCALE_SMOOTH);
            AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
            Itemp = op.filter(Bi, null);
            try {
                ImageIO.write((BufferedImage) Itemp, "jpg", zoomFile);
                ret = new ImageIcon(zoomFile.getPath());
            } catch (Exception ex) {
                System.out.println("######## here error : " + ex);
            }
        }
        return ret;
    }

}
